<?php

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

/**
 * Description of UCheck
 *
 * @author andrea
 */
class UChecks_vidwiz {

    /**
     *
     * Controlla che il file appartenga a un MIME presente in una lista di MIMEs
     * @param string $filename il nome del file
     * @param array $allowed array dei MIMEs ammessi
     * @return bool TRUE se ammesso, FALSE se NON ammesso 
     */
    public function check_allowedMIME($filename,$allowed){
        $model = USingleton_vidwiz::getInstances("Model_vidwiz");
        $debug = USingleton_vidwiz::getInstances("UDebug_vidwiz");
        $file = $model->getFile($filename);
        if(!is_array($file))
            $file = $model->getFileInfo($filename);
        $type = $file['type'];
        if(in_array($type, $allowed)){
            return true;
        }
        return false;
    }
    
    /**
     * Controlla se il file con nome $file è presente nella directory $dir
     * @param string $filename nome del file
     * @param string $dir posizione
     * @return bool True se il file già esiste, False altrimenti 
     */
    public function check_samename($filename,$dir){
        $samename = file_exists($dir.$filename);
        return $samename;    
    }
    
    /**
     * Controlla che l'username sia presente nel database
     * @param string $username l'username da controllare
     * @return TRUE se NON ci sono errori, FALSE se ci sono errori
     */
    public function check_username($username){
        $model = USingleton_vidwiz::getInstances("Model_vidwiz");
        $from = "wp_users";
        $where = array(
            array(
             "user_login",
             "=",
             $username
            )
        );
        $row = $model->getRows($model->searchQuery($from, $where));
        if($row != null)
            return true;
        return false;
        
    }
    
    /**
     * Controlla che il titolo sia scritto nella maniera corretta: 
     * 1. Minimo 5 caratteri
     * 2. Massimo 20 caratteri
     * 3. caratteri ammessi: lettere numeri \. \, \: carattere "spazio"
     * @param string $title Il titolo da controllare
     * @return bool TRUE se NON ci sono errori, FALSE se ci sono errori 
     */
    public function check_title($title){
        global $config;
        $pattern = $config['patterns']['title'];
        if(preg_match($pattern, $title))
            return true;
        else
            return false;
    }
    
    /**
     * Controlla che il testo passato sia scritto nella maniera corretta:
     * 1.Massimo 250 caratteri
     * 2.Caratteri ammessi: lettere numeri \.\,\:\; tutti i caratteri di spaziatura
     * @param string $description il testo da controllare
     * @return bool TRUE se NON ci sono errori, FALSE altrimenti
     */
    public function check_description($description){
        global $config;
        $pattern = $config['patterns']['description'];
        if(preg_match($pattern, $description))
            return true;
        else
            return false;
    }
    /**
     * Controlla che i metatags siano scritti nel modo corretto:
     * 1. Lettere e numeri separati da virgole senza caratteri di punteggiatura
     * 2. Massimo 200 caratteri
     * @param type $metatags 
     */
    public function check_metatags($metatags){
        global $config;
        $pattern = $config['patterns']['metatags'];
        if(preg_match($pattern, $metatags))
            return true;
        else
            return false;
    }
    
    /**
     * Controlla che la categoria passata esista all'interno del database
     * @param string $categoryId l'id della categoria
     * @return bool TRUE in caso NON ci siano errori, FALSE in caso ci siano errori 
     */
    public function check_category($categoryId){
        $debug = USingleton_vidwiz::getInstances("UDebug_vidwiz");
        $model = USingleton_vidwiz::getInstances("Model_vidwiz");
        $from = "wp_terms";
        $where = array(
            array(
             "term_id",
             "=",
             "$categoryId"
            )
        );
        $query = $model->searchQuery($from, $where);
        $row = $model->getRows($query);
        if($row != null)
            return true;
        return false;
        
    }
    
    /**
     * Controlla che tutti i video presenti nella lista siano presenti e siano stati
     * convertiti
     * @global array $config
     * @param array $list la lista degli id dei video
     * @return bool TRUE se NON ci sono problemi, FALSE altrimenti 
     */
    public function check_videoList($list){
        $debug = USingleton_vidwiz::getInstances("UDebug_vidwiz");
        $model = USingleton_vidwiz::getInstances("Model_vidwiz");
        global $config;
        foreach ($list as $value) {
            $rows = $model->getRowsAssoc($model->searchQuery($config['tables']['videos'], array(array("id","=",$value))));
            if(count($rows) == 0)
                return false;
                }
            if($rows[0]['converted'] != 1)
                return false;
        return true;
    }
    
    /**
     * Controlla la correttezza della data passata
     * @param string $date formato: dd/mm/yyyy
     * @return boolean 
     */
    public function check_date($date){
            $ret = true;
            $date2 = explode("/", $date);
            if(count($date2)!=3)
                $date2 = explode("-", $date);
                if(count($date2)!=3)
                    return false;
            $date = $date2;
            $day = (int)$date[0];
            $month = (int)$date[1];
            $year = (int)$date[2];
            if(($month>12 || $day>31))
                $ret = false;
            if(($month==4 || $month==6 || $month==9 || $month==11) && $day>30)
                $ret = false;
            if((($year%4==0 && $year%400 == 0) || ($year%4==0 && $year%100!=0)) && $month == 2 && $day>29)
                $ret = false;
            if(!(($year%4==0 && $year%400 == 0) || ($year%4==0 && $year%100!=0)) && $month==2 && $day>28)
                $ret = false;
            return $ret;
    }
    
    public function check_videoInContest($videoid,$status = false){
        $model = USingleton_vidwiz::getInstances("MPartecipations_vidwiz");
        $debug = USingleton_vidwiz::getInstances("UDebug_vidwiz");
        global $config;
        $where = array(
            array("videoid","=",$videoid)
        );
        if($status != false){
            $whereStatus = array(
                array("status","=",$status)
            );
            $query = $model->searchQuery($config['tables']['contests'],$whereStatus,array('id'));
            
            $where[] = array("contestid"," IN ","(".$query.")");
        }
        
        if($model->countEntries($config['tables']['partecipations'], $where) == 1)
                return true;
        else return false;
    }
    
    public function check_score($score){
        if($score>5 || $score<=0 || is_nan($score))
            return false;
        return true;
       
    }
    
    public function check_notYetRated($videoId,$userId){
        $model = USingleton_vidwiz::getInstances("Model_vidwiz");
        global $config;
        $where = array (
            array("videoid","=",$videoId),
            array("userid",'=',$userId)
        );
        if($model->countEntries($config['tables']['scores'],$where) != 0)
                return false;
        return true;
    }
    
    public function check_ratingDuration($duration){
        if((int)$duration > 90 || (int)$duration < 3)
            return false;
        return true;
    }
    
    public function check_canUploadVideoInContest($id){
        $model = USingleton_vidwiz::getInstances("MContests_vidwiz");
        $debug = USingleton_vidwiz::getInstances("UDebug_vidwiz");
        global $config;
        $contest = $model->getContestFromId($id);
        $stopDate = $contest['stopDate'];
        $d = $model->getDateArray($stopDate);
        $uploadDuration = $contest["uploadDuration"];
        $status = $contest['status'];
        
        if(strtolower($status) == "video_validation"){
            $date = mktime($d['hour'], $d['minutes'], $d['seconds'], $d['month'], $d['day'], $d['year']);
            $cud = strtotime("+$uploadDuration days", $date);
            $cud = date("Y-m-d h:i:s",$cud);
            $date = date("Y-m-d h:i:s");
            if($date >= $cud){
                return false;
                
                }
        }
        return true;
    }
    
    public function check_canVoteContest($id){
        $model = USingleton_vidwiz::getInstances("MContests_vidwiz");
        $debug = USingleton_vidwiz::getInstances("UDebug_vidwiz");
        global $config;
        $contest = $model->getContestFromId($id);
        $stopDate = $contest['stopDate'];
        $d = $model->getDateArray($stopDate);
        $ratingDuration = $contest["ratingDuration"];
        $status = $contest['status'];
        if(strtolower($status) == "voting"){
            $date = mktime($d['hour'], $d['minutes'], $d['seconds'], $d['month'], $d['day'], $d['year']);
            $crd = strtotime("+$ratingDuration days", $date);
            $crd = date("Y-m-d h:i:s",$crd);
            $date = date("Y-m-d h:i:s");
            
            
            if($date >= $crd){
                //non si può votare se $date > $crd
                return false;
                }
        }
        return true;
    }
    
    public function check_canSubscribeInContest($id){
      $model = USingleton_vidwiz::getInstances("MContests_vidwiz");
        global $config;
        $contest = $model->getContestFromId($id);
        $status = $contest['status'];
        if(strtolower($status) == "subscription"){
            return true;
        }
        return false;
    }
    
    public function check_contestStatus($id,$status){
        $debug = USingleton_vidwiz::getInstances("UDebug_vidwiz");
        $model = USingleton_vidwiz::getInstances("MContests_vidwiz");
        global $config;
        $contest = $model->getContestFromId($id);
        
        $getStatus = $contest['status'];
        if($status == strtolower($getStatus)){
            return true;
        }
        return false;
    }

}

?>
